package com.wantup.springboot.boot.quartz;

import org.quartz.*;
import org.quartz.impl.DirectSchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Zhaoluowei
 * @version 1.0
 * @date 2018/11/7 19:43
 */
public class HelloScheduler {
    //jobdetail  是绑定 job的

    public static void main(String[] args) throws SchedulerException, InterruptedException {
        //创建jobdetail 实例 通过反射方式  绑定class jobdetail是通过builder 模式创建的
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob", "group1")
                .build();


        //设置3s之后执行
        Date date = new Date();
        String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
        System.out.println("time : " + time);
//        date.setTime(date.getTime()+3000);
//
//        Date endDate = new Date();
//        endDate.setTime(endDate.getTime()+6000);

          //开始之后 4s 才开始执行
//        date.setTime(date.getTime() + 4000L);
        //创建 Trigger  实例  触发job去执行  Trigger也是 builder模式创建
        CronTrigger trigger = (CronTrigger) TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")
//                .startAt(date)
//                    .endAt(endDate)
//                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
                // 0 15 10 ? * * 2018
                // 0/5 * 14,18 ? * *   0好像表示从整点开始


                .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
                .build();


        //创建调度模式  有两种 都是工程模式  std
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        //开始执行
        scheduler.start();

        //绑定调度器 这个方法的返回值是 最近一次调度器 要执行的时间
        scheduler.scheduleJob(jobDetail, trigger);

        Thread.sleep(2000L);
        //挂起 该 任务
        scheduler.standby();

        //shutdown 关闭 该任务
//        scheduler.shutdown();//该方法调用之后 就不能再 standby

        //任务被挂起 继续执行
        Thread.sleep(3000L);
        scheduler.start();


    }

}


//    public static void main(String[] args) throws SchedulerException {
//        //创建jobdetail 实例 通过反射方式  绑定class jobdetail是通过builder 模式创建的
//        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
//                .withIdentity("myJob","group1")
//                .usingJobData("msg","hello myJob")
//                .usingJobData("data",3.14F)
//                .build();
////        System.out.println("jobDetail name "+jobDetail.getKey().getName());
////        System.out.println("jobDetail group "+jobDetail.getKey().getGroup());
////        System.out.println("jobDetail jobCalss "+jobDetail.getJobClass().getName());
//
//        //创建 Trigger  实例  触发job去执行  Trigger也是 builder模式创建
//        Trigger trigger = TriggerBuilder.newTrigger()
//                .withIdentity("myTrigger","group1")
//                .usingJobData("msg","hello myTrigger")
//                .usingJobData("data",3.14D )
//                .startNow()//立即执行
//                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
//                .build();
//
//
//        //创建调度模式
//        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
//        Scheduler scheduler = schedulerFactory.getScheduler();
//        scheduler.start();
//        scheduler.scheduleJob(jobDetail,trigger);
//
//
//
//    }

